package xkp.lesson.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class MyProxy implements InvocationHandler {
    //private Class targetClass;
    private Object object;

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("代理前....");
        System.out.println(method.getName());
        //此处是通过反射调用对象中的方法
        //Object object = method.invoke(targetClass.newInstance(),args);//此处执行的是真实对象中的方法
        //Object object = this.object;//此处执行的是真实对象中的方法
        object = method.invoke(this.object,args);
        System.out.println("代理后....");
        return object;
    }

    //产生具体的代理对象
    public Object getProxy(Object object){
        //this.targetClass = targetClass;
        this.object = object;
        return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
    }
}
